<?php

namespace app\index\controller;

use think\Controller;
use \Firebase\JWT\JWT;
use think\Request;


class Base extends Controller
{
    
    protected $except=[];//路由白名单
    public $mark=1;
    public function _initialize()
    {
        
        parent::_initialize();
        $resquest=Request::instance();
        $controller=$resquest->controller();
        $action=$resquest->action();
        //判断路由
        if($controller=='Index'){
            if($action=='login' || $action=='regUser'){
               $this->mark=0;
               
            }
        }
        
        if($this->mark==1){
            
            if (!$this->check()) {
                return  $this->errorReturn('签名验证失败', '4006');
            }
        }

        return true;
        
    }
    
    
    
    /**
     * 统一成功返回
     *
     * @param [type] $data 数据
     * @param [type] $msg  信息
     * @return void
     */
    public function SuccessReturn($msg, $data = null)
    {
        return json_encode(['status' => 'success', 'code' => 200, 'msg' => $msg, 'data' => $data],JSON_UNESCAPED_UNICODE);
    }
    /**
     * 统一接口返回错误
     *
     * @param [type] $data 数据
     * @param [type] $msg  信息
     * @param [type] $code 错误码
     * @return void
     */
    public function errorReturn($msg, $code)
    {
        return json_encode(['status' => 'error', 'code' => $code, 'msg' => $msg],JSON_UNESCAPED_UNICODE);
    }

    /**
     * token生成
     *
     * @param [type] $user_id
     * @return void
     */
    public function getToken($user_id)
    {
        $key = "test123";  //秘钥 应放在配置中
        $token = [
            "iss" => "",  //签发者 可以为空
            "aud" => "", //面象的用户，可以为空
            "iat" => time(), //签发时间
            "nbf" => time(), //在什么时候jwt开始生效 
            "exp" => time() + 7200, //token 过期时间
            "uid" => $user_id //用户ID
        ];

        return  $jwt = JWT::encode($token, $key, "HS256"); //根据参数生成了 token
    }
    /**
     * token验证
     *
     * @return void
     */
    public function check()
    {
        $jwt = input("token");
        $key = "test123";
        $info = JWT::decode($jwt, $key, ["HS256"]); //解密jwt
        return $info;
    }





}